// utils/deepseekApi.js
/**
 * DeepSeek API 服务工具类
 * 用于统一管理DeepSeek API调用
 */

class DeepSeekAPI {
  constructor() {
    // API配置
    this.baseURL = 'https://api.deepseek.com/v1';
    this.apiKey = 'YOUR_DEEPSEEK_API_KEY'; // 请替换为您的API密钥
    this.model = 'deepseek-chat';
    this.maxTokens = 1000;
    this.temperature = 0.7;
  }

  /**
   * 设置API密钥
   * @param {string} apiKey - DeepSeek API密钥
   */
  setApiKey(apiKey) {
    this.apiKey = apiKey;
  }

  /**
   * 调用DeepSeek聊天API
   * @param {string} message - 用户消息
   * @param {string} systemPrompt - 系统提示词
   * @param {Array} conversationHistory - 对话历史
   * @returns {Promise<string>} AI回复内容
   */
  async chat(message, systemPrompt = '', conversationHistory = []) {
    try {
      // 构建消息数组
      const messages = [];
      
      // 添加系统提示词
      if (systemPrompt) {
        messages.push({
          role: 'system',
          content: systemPrompt
        });
      }

      // 添加对话历史
      if (conversationHistory && conversationHistory.length > 0) {
        messages.push(...conversationHistory);
      }

      // 添加当前用户消息
      messages.push({
        role: 'user',
        content: message
      });

      // 调用API
      const response = await this.request('/chat/completions', {
        model: this.model,
        messages: messages,
        max_tokens: this.maxTokens,
        temperature: this.temperature
      });

      return response.choices[0].message.content;
    } catch (error) {
      console.error('DeepSeek API调用失败:', error);
      throw error;
    }
  }

  /**
   * 健康饮食专业咨询
   * @param {string} question - 用户问题
   * @param {Object} userInfo - 用户信息
   * @returns {Promise<string>} AI回复
   */
  async healthConsultation(question, userInfo = {}) {
    const systemPrompt = `你是一个专业的AI体重管理师和营养顾问，具备以下专业能力：
1. 健康饮食建议和营养搭配
2. 体重管理和减重指导
3. 运动建议和生活方式改善
4. 食物热量计算和营养成分分析
5. 慢性病饮食管理（如糖尿病、高血压等）

请用友好、专业、易懂的语气回答用户问题，并提供实用的建议。如果涉及医疗建议，请提醒用户咨询专业医生。

用户信息：${JSON.stringify(userInfo)}`;

    return await this.chat(question, systemPrompt);
  }

  /**
   * 食物识别和分析
   * @param {string} foodDescription - 食物描述
   * @returns {Promise<string>} 食物分析结果
   */
  async analyzeFood(foodDescription) {
    const systemPrompt = `你是一个专业的营养师，擅长食物营养成分分析和热量计算。
请根据用户提供的食物信息，分析其营养成分、热量含量，并提供健康建议。
如果信息不够详细，请询问更多细节。`;

    const question = `请分析以下食物：${foodDescription}`;
    return await this.chat(question, systemPrompt);
  }

  /**
   * 运动建议
   * @param {Object} userProfile - 用户档案
   * @param {string} goal - 运动目标
   * @returns {Promise<string>} 运动建议
   */
  async getExerciseAdvice(userProfile, goal) {
    const systemPrompt = `你是一个专业的健身教练，擅长制定个性化的运动计划。
请根据用户的个人信息和运动目标，提供合适的运动建议。`;

    const question = `用户信息：${JSON.stringify(userProfile)}，运动目标：${goal}`;
    return await this.chat(question, systemPrompt);
  }

  /**
   * 发送HTTP请求
   * @param {string} endpoint - API端点
   * @param {Object} data - 请求数据
   * @returns {Promise<Object>} 响应数据
   */
  async request(endpoint, data) {
    return new Promise((resolve, reject) => {
      wx.request({
        url: this.baseURL + endpoint,
        method: 'POST',
        header: {
          'Content-Type': 'application/json',
          'Authorization': `Bearer ${this.apiKey}`
        },
        data: data,
        success: (res) => {
          if (res.statusCode === 200) {
            resolve(res.data);
          } else {
            reject(new Error(`API请求失败: ${res.statusCode}`));
          }
        },
        fail: (error) => {
          reject(error);
        }
      });
    });
  }

  /**
   * 检查API密钥是否有效
   * @returns {Promise<boolean>} 是否有效
   */
  async validateApiKey() {
    try {
      await this.chat('你好', '你是一个AI助手');
      return true;
    } catch (error) {
      return false;
    }
  }

  /**
   * 获取API使用统计
   * @returns {Object} 使用统计信息
   */
  getUsageStats() {
    // 这里可以添加使用统计逻辑
    return {
      totalRequests: 0,
      totalTokens: 0,
      lastUsed: null
    };
  }
}

// 创建单例实例
const deepSeekAPI = new DeepSeekAPI();

// 导出实例和类
module.exports = {
  DeepSeekAPI,
  deepSeekAPI
};
